/*
 * @Author: xuetao 3168581151@qq.com
 * @Date: 2025-03-12
 * @LastEditors: xuetao 3168581151@qq.com
 * @LastEditTime: 2025-03-12
 * @Description: 
 */

// 使用方式：
//  Navigator.push(
//       context,
//       TopNotificationRoute(
//         builder: (_) => widegetPage(),
//       ),
//     );

// 继承 PopupRoute 创建自定义路由，通过 Navigator.push 显示弹窗，通过 Navigator.pop 关闭弹窗
// PopupRoute (顶层覆盖)
import 'package:flutter/material.dart';

class TopNotificationRoute extends PopupRoute {
  final WidgetBuilder builder;

  TopNotificationRoute({required this.builder});

  @override
  Color? get barrierColor => Colors.transparent; // 透明表示无遮罩

  @override
  bool get barrierDismissible => false; // 不允许点击外部（遮罩层）关闭！！！

  @override
  String? get barrierLabel => '通知'; // 无障碍

  // 动画曲线和位置控制
  static final Animatable<Offset> _slideTween = Tween<Offset>(
    begin: const Offset(0.0, 0.01), // 从屏幕顶部开始（ y轴1% 位置开始 ）
    end: Offset(0, 0.04), // 滑动到距离顶部 5% 的位置
  ).chain(CurveTween(curve: Curves.easeOutQuad)); // 添加缓动曲线

  @override
  Widget buildPage(BuildContext context, Animation<double> animation,
      Animation<double> secondaryAnimation) {
    return Align(
      alignment: Alignment.topCenter,
      child: SafeArea(
        child: Material(
          color: Colors.transparent,
          child: Builder(builder: builder),
        ),
      ),
    );
  }

  // 新增构建动画过渡效果
  @override
  Widget buildTransitions(BuildContext context, Animation<double> animation,
      Animation<double> secondaryAnimation, Widget child) {
    return SlideTransition(
      position: animation.drive(_slideTween),
      child: FadeTransition(
        // 组合淡入效果
        opacity: CurvedAnimation(
          parent: animation,
          curve: Interval(0.0, 0.5), // 前半段完成淡入
        ),
        child: child,
      ),
    );
  }

  @override
  Duration get transitionDuration => const Duration(milliseconds: 250); // 动画时间
}
